#include <REGX52.H>
#include "LCD1602.h"
#include "type.h"

extern time clock;
extern time stopwatch;
extern time alarm;
extern unsigned int timemode;
extern unsigned char second_more_hour;

// 时间初始化
void Time_Init(time* t){
	time* p = t;
	p->h = p->min = p->s = p->ms_10 = 0;
}

// 所有模块初始化（把各个模块扔进去初始化
void All_Mod_Init(){
	Time_Init(&clock);
	Time_Init(&stopwatch);
	Time_Init(&alarm);
}

// LCD显示时分秒
void LCD_Show_h_min_s(time* p){
	time* t = p;
	LCD_ShowNum(1,9,t->h,2);
	LCD_ShowChar(1,11,':');
	LCD_ShowNum(1,12,t->min,2);
	LCD_ShowChar(1,14,':');
	LCD_ShowNum(1,15,t->s,2);
}

// LCD显示分、秒、1/100毫秒
void LCD_Show_min_s_ms_10(time *p){
	time* t = p;
	LCD_ShowNum(1,9,t->min,2);
	LCD_ShowChar(1,11,':');
	LCD_ShowNum(1,12,t->s,2);
	LCD_ShowChar(1,14,':');
	LCD_ShowNum(1,15,t->ms_10,2);
}

// LCD显示时、分
void LCD_Show_h_min(time* p){
	time* t = p;
	LCD_ShowNum(1,12,t->h,2);
	LCD_ShowChar(1,14,':');
	LCD_ShowNum(1,15,t->min,2);
}

// LCD显示秒表
void LCD_Show_stopwatch(){
	// 检测秒表是否运行时长大于一个小时 是则显示时分秒 否则显示秒毫秒
	if(second_more_hour){
		LCD_Show_h_min_s(&stopwatch);
	}
	else{
		LCD_Show_min_s_ms_10(&stopwatch);
	}
}

// LCD显示时间：根据当前时间模式显示时间
void LCD_ShowTime(){
	// 不同模式显示不同数
		switch (timemode){
		case CLOCK:
			LCD_Show_h_min_s(&clock);
			LCD_ShowString(2,1,"clock");
		break;
		case STOPWATCH:
			LCD_Show_stopwatch();
			LCD_ShowString(2,1,"stopwatch");
		break;
		case ALARM:
			LCD_Show_h_min(&alarm);
			LCD_ShowString(2,1,"alarm");
		break;
		case SET:
			LCD_Show_h_min_s(&clock);
			LCD_ShowString(2,1,"set");
		break;
		}
	// 如果不是秒表模式或者秒表记录时长超过一小时 显示前三位
}

// 测试初始化 看看是否有用
void Test_Init(){
	// 时钟
	time* p = &clock;
	p->h = 0;
	p->min = 0;
	p->s = 0;
	p->ms_10 = 0;
	// 秒表
	p = &stopwatch;
	p->h = 0;
	p->min = 0;
	p->s = 0;
//	p->h = 1;
//	p->min = 59;
//	p->s = 50;
	p->ms_10 = 0;
	// 闹钟
	p = &alarm;
	p->h = 4;
	p->min = 10;
	p->s = 0;
	p->ms_10 = 0;
}

void LCD1602_Init(){
	LCD_Init();
//	All_Mod_Init();
	Test_Init();
	LCD_ShowTime();
}

